#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""

@author Luis Shou
@date: 1/12/14
@obs: Este módulo contem a classe e métodos que permitem a criação da interface gráfica
da aplicação.

"""

import sys
from Tkinter import *
import tkMessageBox
import createDatabase
import createGraph
import getData

class MainFrame(object):
        """
        Classe main.
        
        Classe que irá criar a interface gráfica do programa.
        
        """
        def __init__(self, window_title):
                super(MainFrame, self).__init__()
                self.window_title = window_title
                        
                self.window = Tk()

                self.var = StringVar(self.window)
                self.var.set("Índice de preços ao consumidor") # initial value

                # Criação da base de dados
                createDatabase.init_sqlalchemy()

                self.startYear = ""
                self.endYear = ""
                
                self.start_views(window_title)
                self.window.mainloop()

        def start_views(self, window_title):
                """

                Inicia as views da janela principal do sistema
                
                """
                self.window.title(window_title)
                
                statistics_label = Label(self.window, text = 'Escolha a estatística pretendida:', font=12).grid(row=0)

                option = OptionMenu(self.window, self.var, "Indice de Precos ao Consumidor", "Taxa de Inflacao", "Remuneracao Minima Mensal",
                                                         "Remuneracao Maxima Mensal", "Evol. das Remun. Min. e Max. Mensais a Precos",
                                                         "Produto Interno Bruto Anual per Capita", "Rendimento Nacional Bruto Anual per Capita",
                                                         "Rendimento Disponível Bruto Anual per Capita", "Remuneracoes per Capita Anuais")
                option.grid(row=1)

                years = Label(self.window, text = 'Escolha o intervalo de anos desejado:', font=12).grid(row=2)
                label_from = Label(self.window, text = 'Desde:').grid(row=3)

                self.comboStartYear()

                label_till = Label(self.window, text = ' Até:').grid(row=5)

                self.comboEndYear()
                                
                button = Button(self.window, text="Mostrar Estatística", command=self.showStats, bg="green", activebackground="yellow")
                button.grid(row=7, column=0)

                buttonSair = Button(self.window, text="Sair", command=self.fechar, bg="green", activebackground="yellow")
                buttonSair.grid(row=8, column=0)
                
                pass

        def fechar(self):
                self.window.destroy()
        pass


        def comboStartYear(self):
                """
                Método que cria uma combobox para o
                utilzador selecionar o primeiro ano
                que pretende vizualizar na estatística.
                """
                box_value = StringVar()
                
                data = getData.GetData()

                self.box_startYear = OptionMenu(self.window, box_value, *data.get_years_col(), command = self.getStartYear).grid(row=4, column=0)

        pass

        def comboEndYear(self):
                """
                Método que cria uma combobox para o
                utilziador selecionar o ultimo ano
                que pretende vizualizar na estatística.
                """
                box_value = StringVar()
                
                data = getData.GetData()

                self.box_endYear = OptionMenu(self.window, box_value, *data.get_years_col(), command = self.getEndYear).grid(row=6)

        pass

        def getStartYear(self, selection):
                """
                Método que define o primeiro ano desejado para a estatística
                """
                self.startYear = selection
                pass

        def getEndYear(self, selection):
                """
                Método que define o ultimo ano desejado para a estatística
                """
                self.endYear = selection
                pass

        def showStats(self):
                """
                Método que cria o gráfico da estatística que o utilizador
                selecionou anteriormente na respectiva ComboBox
                no intervalo de anos selecionados.
                """
                
                self.s = self.var.get()
                
                if (self.startYear == "") | (self.endYear == ""):
                        tkMessageBox.showinfo('WARNING!', 'Introduza o intervalo de anos desejado!! ')
                        pass
                elif self.s == "Indice de Precos ao Consumidor":
                        createGraph.Graphics("ipc", self.startYear, self.endYear)
                        pass
                elif self.s == "Taxa de Inflacao":
                        createGraph.Graphics("tInflacao", self.startYear, self.endYear)
                        pass
                elif self.s == "Remuneracao Minima Mensal":
                        createGraph.Graphics("rMinMensal", self.startYear, self.endYear)
                        pass
                elif self.s == "Remuneracao Maxima Mensal":
                        createGraph.Graphics("rMaxMensal", self.startYear, self.endYear)
                        pass
                elif self.s == "Evol. das Remun. Min. e Max. Mensais a Precos":
                        createGraph.Graphics("evolRemMinMaxMensal", self.startYear, self.endYear)
                        pass
                elif self.s == "Produto Interno Bruto Anual per Capita":
                        createGraph.Graphics("PIBanual", self.startYear, self.endYear)
                        pass
                elif self.s == "Rendimento Nacional Bruto Anual per Capita":
                        createGraph.Graphics("RNBanual", self.startYear, self.endYear)
                        pass
                elif self.s == "Rendimento Disponível Bruto Anual per Capita":
                        createGraph.Graphics("RDBanual", self.startYear, self.endYear)
                        pass
                elif self.s == "Remuneracoes per Capita Anuais":
                        createGraph.Graphics("remuneracoesAnuais", self.startYear, self.endYear)
                        pass
                
def main():
    windowFrame = MainFrame("Evolução dos Salários da Função Pública em Portugal")
    windowFrame.window.mainloop()  
   

if __name__ == '__main__':
    main()
